Add extension point to register JGit PostUploadHooks Plugins may register PostUploadHook instances in order to get notified after JGit is done uploading a pack. Now that PostUploadHook can be registered using the DynamicSet, use that mechanism to register UploadPackMetricsHook. Change-Id: If848bddc85ca8923a5d55f7dd448ac218c910e1c 
diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt index 22be05b..7acda4c 100644 --- a/Documentation/dev-plugins.txt +++ b/Documentation/dev-plugins.txt 
@@ -498,6 +498,12 @@  for those plugins which would like to monitor usage in Git  repositories.   +[[post-upload-hook]] +== Post Upload-Pack Hooks + +Plugins may register PostUploadHook instances in order to get notified after +JGit is done uploading a pack. +  [[ssh]]  == SSH Commands   
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java index b1db772..bae6d19 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java 
@@ -31,7 +31,6 @@  import com.google.gerrit.server.git.SearchingChangeCacheImpl;  import com.google.gerrit.server.git.TagCache;  import com.google.gerrit.server.git.TransferConfig; -import com.google.gerrit.server.git.UploadPackMetricsHook;  import com.google.gerrit.server.git.VisibleRefFilter;  import com.google.gerrit.server.git.validators.UploadValidators;  import com.google.gerrit.server.notedb.ChangeNotes; @@ -51,6 +50,8 @@  import org.eclipse.jgit.http.server.resolver.AsIsFileService;  import org.eclipse.jgit.lib.ObjectId;  import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.transport.PostUploadHook; +import org.eclipse.jgit.transport.PostUploadHookChain;  import org.eclipse.jgit.transport.PreUploadHook;  import org.eclipse.jgit.transport.PreUploadHookChain;  import org.eclipse.jgit.transport.ReceivePack; @@ -198,16 +199,16 @@    static class UploadFactory implements UploadPackFactory<HttpServletRequest> {  private final TransferConfig config; - private final UploadPackMetricsHook uploadMetrics;  private final DynamicSet<PreUploadHook> preUploadHooks; + private final DynamicSet<PostUploadHook> postUploadHooks;    @Inject  UploadFactory(TransferConfig tc, - UploadPackMetricsHook uploadMetrics, - DynamicSet<PreUploadHook> preUploadHooks) { + DynamicSet<PreUploadHook> preUploadHooks, + DynamicSet<PostUploadHook> postUploadHooks) {  this.config = tc; - this.uploadMetrics = uploadMetrics;  this.preUploadHooks = preUploadHooks; + this.postUploadHooks = postUploadHooks;  }    @Override @@ -217,7 +218,8 @@  up.setTimeout(config.getTimeout());  up.setPreUploadHook(PreUploadHookChain.newChain(  Lists.newArrayList(preUploadHooks))); - up.setPostUploadHook(uploadMetrics); + up.setPostUploadHook( + PostUploadHookChain.newChain(Lists.newArrayList(postUploadHooks)));  return up;  }  } 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java index 7ef964c..3ab19bf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java 
@@ -173,6 +173,7 @@  import org.apache.velocity.runtime.RuntimeInstance;  import org.eclipse.jgit.lib.Config;  import org.eclipse.jgit.transport.PostReceiveHook; +import org.eclipse.jgit.transport.PostUploadHook;  import org.eclipse.jgit.transport.PreUploadHook;    import java.util.List; @@ -314,6 +315,7 @@  DynamicSet.setOf(binder(), ReceivePackInitializer.class);  DynamicSet.setOf(binder(), PostReceiveHook.class);  DynamicSet.setOf(binder(), PreUploadHook.class); + DynamicSet.setOf(binder(), PostUploadHook.class);  DynamicSet.setOf(binder(), ChangeIndexedListener.class);  DynamicSet.setOf(binder(), NewProjectCreatedListener.class);  DynamicSet.setOf(binder(), ProjectDeletedListener.class); 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModule.java index aa0fc55..e609d68 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModule.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModule.java 
@@ -15,6 +15,9 @@  package com.google.gerrit.server.git;    import com.google.gerrit.extensions.config.FactoryModule; +import com.google.gerrit.extensions.registration.DynamicSet; + +import org.eclipse.jgit.transport.PostUploadHook;    /** Configures the Git support. */  public class GitModule extends FactoryModule { @@ -24,5 +27,7 @@  factory(MetaDataUpdate.InternalFactory.class);  bind(MetaDataUpdate.Server.class);  bind(ReceiveConfig.class); + DynamicSet.bind(binder(), PostUploadHook.class) + .to(UploadPackMetricsHook.class);  }  } 
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java index 644ff6e..181b0c6 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java 
@@ -21,7 +21,6 @@  import com.google.gerrit.server.git.SearchingChangeCacheImpl;  import com.google.gerrit.server.git.TagCache;  import com.google.gerrit.server.git.TransferConfig; -import com.google.gerrit.server.git.UploadPackMetricsHook;  import com.google.gerrit.server.git.VisibleRefFilter;  import com.google.gerrit.server.git.validators.UploadValidationException;  import com.google.gerrit.server.git.validators.UploadValidators; @@ -30,6 +29,8 @@  import com.google.gerrit.sshd.SshSession;  import com.google.inject.Inject;   +import org.eclipse.jgit.transport.PostUploadHook; +import org.eclipse.jgit.transport.PostUploadHookChain;  import org.eclipse.jgit.transport.PreUploadHook;  import org.eclipse.jgit.transport.PreUploadHookChain;  import org.eclipse.jgit.transport.UploadPack; @@ -59,14 +60,14 @@  private DynamicSet<PreUploadHook> preUploadHooks;    @Inject + private DynamicSet<PostUploadHook> postUploadHooks; + + @Inject  private UploadValidators.Factory uploadValidatorsFactory;    @Inject  private SshSession session;   - @Inject - private UploadPackMetricsHook uploadMetrics; -  @Override  protected void runImpl() throws IOException, Failure {  if (!projectControl.canRunUploadPack()) { @@ -80,7 +81,8 @@  true));  up.setPackConfig(config.getPackConfig());  up.setTimeout(config.getTimeout()); - up.setPostUploadHook(uploadMetrics); + up.setPostUploadHook( + PostUploadHookChain.newChain(Lists.newArrayList(postUploadHooks)));    List<PreUploadHook> allPreUploadHooks = Lists.newArrayList(preUploadHooks);  allPreUploadHooks.add(uploadValidatorsFactory.create(project, repo,